{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7922c51a-0f3d-4bfb-a5c6-c9b1126a1177",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from openai import OpenAI\n",
    "\n",
    "# 建议将 API Key 设置为环境变量，避免直接暴露在代码中\n",
    "# 从环境变量获取 DeepSeek API Key\n",
    "api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n",
    "if not api_key:\n",
    "    raise ValueError(\"请设置 DEEPSEEK_API_KEY 环境变量\")\n",
    "\n",
    "# 初始化 DeepSeek 客户端\n",
    "\n",
    "client = OpenAI(\n",
    "    api_key=api_key,\n",
    "    base_url=\"https://api.deepseek.com/v1\",  # DeepSeek API 的基地址\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "389d5ba7-b947-4c79-9763-93214e269205",
   "metadata": {},
   "outputs": [],
   "source": [
    "SYSTEM_PROMPT = \"\"\"\n",
    "你是一个资深的小红书爆款文案专家，擅长结合最新潮流和产品卖点，创作引人入胜、高互动、高转化的笔记文案。\n",
    "\n",
    "你的任务是根据用户提供的产品和需求，生成包含标题、正文、相关标签和表情符号的完整小红书笔记。\n",
    "\n",
    "请始终采用'Thought-Action-Observation'模式进行推理和行动。文案风格需活泼、真诚、富有感染力。当完成任务后，请以JSON格式直接输出最终文案，格式如下：\n",
    "```json\n",
    "{\n",
    "  \"title\": \"小红书标题\",\n",
    "  \"body\": \"小红书正文\",\n",
    "  \"hashtags\": [\"#标签1\", \"#标签2\", \"#标签3\", \"#标签4\", \"#标签5\"],\n",
    "  \"emojis\": [\"✨\", \"🔥\", \"💖\"]\n",
    "}\n",
    "```\n",
    "在生成文案前，请务必先思考并收集足够的信息。\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c8dc2d7a-a74d-4ca6-b5ae-fb21da864b0a",
   "metadata": {},
   "outputs": [],
   "source": [
    "TOOLS_DEFINITION = [\n",
    "    {\n",
    "        \"type\": \"function\",\n",
    "        \"function\": {\n",
    "            \"name\": \"search_web\",\n",
    "            \"description\": \"搜索互联网上的实时信息，用于获取最新新闻、流行趋势、用户评价、行业报告等。请确保搜索关键词精确，避免宽泛的查询。\",\n",
    "            \"parameters\": {\n",
    "                \"type\": \"object\",\n",
    "                \"properties\": {\n",
    "                    \"query\": {\n",
    "                        \"type\": \"string\",\n",
    "                        \"description\": \"要搜索的关键词或问题，例如'最新小红书美妆趋势'或'深海蓝藻保湿面膜 用户评价'\"\n",
    "                    }\n",
    "                },\n",
    "                \"required\": [\"query\"]\n",
    "            }\n",
    "        }\n",
    "    },\n",
    "    {\n",
    "        \"type\": \"function\",\n",
    "        \"function\": {\n",
    "            \"name\": \"query_product_database\",\n",
    "            \"description\": \"查询内部产品数据库，获取指定产品的详细卖点、成分、适用人群、使用方法等信息。\",\n",
    "            \"parameters\": {\n",
    "                \"type\": \"object\",\n",
    "                \"properties\": {\n",
    "                    \"product_name\": {\n",
    "                        \"type\": \"string\",\n",
    "                        \"description\": \"要查询的产品名称，例如'深海蓝藻保湿面膜'\"\n",
    "                    }\n",
    "                },\n",
    "                \"required\": [\"product_name\"]\n",
    "            }\n",
    "        }\n",
    "    },\n",
    "    {\n",
    "        \"type\": \"function\",\n",
    "        \"function\": {\n",
    "            \"name\": \"generate_emoji\",\n",
    "            \"description\": \"根据提供的文本内容，生成一组适合小红书风格的表情符号。\",\n",
    "            \"parameters\": {\n",
    "                \"type\": \"object\",\n",
    "                \"properties\": {\n",
    "                    \"context\": {\n",
    "                        \"type\": \"string\",\n",
    "                        \"description\": \"文案的关键内容或情感，例如'惊喜效果'、'补水保湿'\"\n",
    "                    }\n",
    "                },\n",
    "                \"required\": [\"context\"]\n",
    "            }\n",
    "        }\n",
    "    }\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6bfb4d8e-e2a5-4ae0-bd36-30ff2589f304",
   "metadata": {},
   "outputs": [],
   "source": [
    "import random # 用于模拟生成表情\n",
    "import time # 用于模拟网络延迟\n",
    "\n",
    "def mock_search_web(query: str) -> str:\n",
    "    \"\"\"模拟网页搜索工具，返回预设的搜索结果。\"\"\"\n",
    "    print(f\"[Tool Call] 模拟搜索网页：{query}\")\n",
    "    time.sleep(1) # 模拟网络延迟\n",
    "    if \"小红书美妆趋势\" in query:\n",
    "        return \"近期小红书美妆流行'多巴胺穿搭'、'早C晚A'护肤理念、'伪素颜'妆容，热门关键词有#氛围感、#抗老、#屏障修复。\"\n",
    "    elif \"保湿面膜\" in query:\n",
    "        return \"小红书保湿面膜热门话题：沙漠干皮救星、熬夜急救面膜、水光肌养成。用户痛点：卡粉、泛红、紧绷感。\"\n",
    "    elif \"深海蓝藻保湿面膜\" in query:\n",
    "        return \"关于深海蓝藻保湿面膜的用户评价：普遍反馈补水效果好，吸收快，对敏感肌友好。有用户提到价格略高，但效果值得。\"\n",
    "    else:\n",
    "        return f\"未找到关于 '{query}' 的特定信息，但市场反馈通常关注产品成分、功效和用户体验。\"\n",
    "\n",
    "def mock_query_product_database(product_name: str) -> str:\n",
    "    \"\"\"模拟查询产品数据库，返回预设的产品信息。\"\"\"\n",
    "    print(f\"[Tool Call] 模拟查询产品数据库：{product_name}\")\n",
    "    time.sleep(0.5) # 模拟数据库查询延迟\n",
    "    if \"深海蓝藻保湿面膜\" in product_name:\n",
    "        return \"深海蓝藻保湿面膜：核心成分为深海蓝藻提取物，富含多糖和氨基酸，能深层补水、修护肌肤屏障、舒缓敏感泛红。质地清爽不粘腻，适合所有肤质，尤其适合干燥、敏感肌。规格：25ml*5片。\"\n",
    "    elif \"美白精华\" in product_name:\n",
    "        return \"美白精华：核心成分是烟酰胺和VC衍生物，主要功效是提亮肤色、淡化痘印、改善暗沉。质地轻薄易吸收，适合需要均匀肤色的人群。\"\n",
    "    else:\n",
    "        return f\"产品数据库中未找到关于 '{product_name}' 的详细信息。\"\n",
    "\n",
    "def mock_generate_emoji(context: str) -> list:\n",
    "    \"\"\"模拟生成表情符号，根据上下文提供常用表情。\"\"\"\n",
    "    print(f\"[Tool Call] 模拟生成表情符号，上下文：{context}\")\n",
    "    time.sleep(0.2) # 模拟生成延迟\n",
    "    if \"补水\" in context or \"水润\" in context or \"保湿\" in context:\n",
    "        return [\"💦\", \"💧\", \"🌊\", \"✨\"]\n",
    "    elif \"惊喜\" in context or \"哇塞\" in context or \"爱了\" in context:\n",
    "        return [\"💖\", \"😍\", \"🤩\", \"💯\"]\n",
    "    elif \"熬夜\" in context or \"疲惫\" in context:\n",
    "        return [\"😭\", \"😮‍💨\", \"😴\", \"💡\"]\n",
    "    elif \"好物\" in context or \"推荐\" in context:\n",
    "        return [\"✅\", \"👍\", \"⭐\", \"🛍️\"]\n",
    "    else:\n",
    "        return random.sample([\"✨\", \"🔥\", \"💖\", \"💯\", \"🎉\", \"👍\", \"🤩\", \"💧\", \"🌿\"], k=min(5, len(context.split())))\n",
    "\n",
    "# 将模拟工具函数映射到一个字典，方便通过名称调用\n",
    "available_tools = {\n",
    "    \"search_web\": mock_search_web,\n",
    "    \"query_product_database\": mock_query_product_database,\n",
    "    \"generate_emoji\": mock_generate_emoji,\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e816ca75-f78d-4d3b-a86b-3bec806c3678",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import re\n",
    "\n",
    "def generate_rednote(product_name: str, tone_style: str = \"活泼甜美\", max_iterations: int = 5) -> str:\n",
    "    \"\"\"\n",
    "    使用 DeepSeek Agent 生成小红书爆款文案。\n",
    "    \n",
    "    Args:\n",
    "        product_name (str): 要生成文案的产品名称。\n",
    "        tone_style (str): 文案的语气和风格，如\"活泼甜美\"、\"知性\"、\"搞怪\"等。\n",
    "        max_iterations (int): Agent 最大迭代次数，防止无限循环。\n",
    "        \n",
    "    Returns:\n",
    "        str: 生成的爆款文案（JSON 格式字符串）。\n",
    "    \"\"\"\n",
    "    \n",
    "    print(f\"\\n🚀 启动小红书文案生成助手，产品：{product_name}，风格：{tone_style}\\n\")\n",
    "    \n",
    "    # 存储对话历史，包括系统提示词和用户请求\n",
    "    messages = [\n",
    "        {\"role\": \"system\", \"content\": SYSTEM_PROMPT},\n",
    "        {\"role\": \"user\", \"content\": f\"请为产品「{product_name}」生成一篇小红书爆款文案。要求：语气{tone_style}，包含标题、正文、至少5个相关标签和5个表情符号。请以完整的JSON格式输出，并确保JSON内容用markdown代码块包裹（例如：```json{{...}}```）。\"}\n",
    "    ]\n",
    "    \n",
    "    iteration_count = 0\n",
    "    final_response = None\n",
    "    \n",
    "    while iteration_count < max_iterations:\n",
    "        iteration_count += 1\n",
    "        print(f\"-- Iteration {iteration_count} --\")\n",
    "        \n",
    "        try:\n",
    "            # 调用 DeepSeek API，传入对话历史和工具定义\n",
    "            response = client.chat.completions.create(\n",
    "                model=\"deepseek-chat\",\n",
    "                messages=messages,\n",
    "                tools=TOOLS_DEFINITION, # 告知模型可用的工具\n",
    "                tool_choice=\"auto\" # 允许模型自动决定是否使用工具\n",
    "            )\n",
    "\n",
    "            response_message = response.choices[0].message\n",
    "            print(\"\\n\\n\\n-----------hiker debug start-----------\")\n",
    "            print(response_message)\n",
    "            print(\"-----------hiker debug end-----------\\n\\n\\n\")\n",
    "            \n",
    "            # **ReAct模式：处理工具调用**\n",
    "            if response_message.tool_calls: # 如果模型决定调用工具\n",
    "                print(\"Agent: 决定调用工具...\")\n",
    "                messages.append(response_message) # 将工具调用信息添加到对话历史\n",
    "                \n",
    "                tool_outputs = []\n",
    "                for tool_call in response_message.tool_calls:\n",
    "                    function_name = tool_call.function.name\n",
    "                    # 确保参数是合法的JSON字符串，即使工具不要求参数，也需要传递空字典\n",
    "                    function_args = json.loads(tool_call.function.arguments) if tool_call.function.arguments else {}\n",
    "\n",
    "                    print(f\"Agent Action: 调用工具 '{function_name}'，参数：{function_args}\")\n",
    "                    \n",
    "                    # 查找并执行对应的模拟工具函数\n",
    "                    if function_name in available_tools:\n",
    "                        tool_function = available_tools[function_name]\n",
    "                        tool_result = tool_function(**function_args)\n",
    "                        print(f\"Observation: 工具返回结果：{tool_result}\")\n",
    "                        tool_outputs.append({\n",
    "                            \"tool_call_id\": tool_call.id,\n",
    "                            \"role\": \"tool\",\n",
    "                            \"content\": str(tool_result) # 工具结果作为字符串返回\n",
    "                        })\n",
    "                    else:\n",
    "                        error_message = f\"错误：未知的工具 '{function_name}'\"\n",
    "                        print(error_message)\n",
    "                        tool_outputs.append({\n",
    "                            \"tool_call_id\": tool_call.id,\n",
    "                            \"role\": \"tool\",\n",
    "                            \"content\": error_message\n",
    "                        })\n",
    "                messages.extend(tool_outputs) # 将工具执行结果作为 Observation 添加到对话历史\n",
    "                \n",
    "            # **ReAct 模式：处理最终内容**\n",
    "            elif response_message.content: # 如果模型直接返回内容（通常是最终答案）\n",
    "                print(f\"[模型生成结果] {response_message.content}\")\n",
    "                \n",
    "                # --- START: 添加 JSON 提取和解析逻辑 ---\n",
    "                json_string_match = re.search(r\"```json\\s*(\\{.*\\})\\s*```\", response_message.content, re.DOTALL)\n",
    "                \n",
    "                if json_string_match:\n",
    "                    extracted_json_content = json_string_match.group(1)\n",
    "                    try:\n",
    "                        final_response = json.loads(extracted_json_content)\n",
    "                        print(\"Agent: 任务完成，成功解析最终JSON文案。\")\n",
    "                        return json.dumps(final_response, ensure_ascii=False, indent=2)\n",
    "                    except json.JSONDecodeError as e:\n",
    "                        print(f\"Agent: 提取到JSON块但解析失败: {e}\")\n",
    "                        print(f\"尝试解析的字符串:\\n{extracted_json_content}\")\n",
    "                        messages.append(response_message) # 解析失败，继续对话\n",
    "                else:\n",
    "                    # 如果没有匹配到 ```json 块，尝试直接解析整个 content\n",
    "                    try:\n",
    "                        final_response = json.loads(response_message.content)\n",
    "                        print(\"Agent: 任务完成，直接解析最终JSON文案。\")\n",
    "                        return json.dumps(final_response, ensure_ascii=False, indent=2)\n",
    "                    except json.JSONDecodeError:\n",
    "                        print(\"Agent: 生成了非JSON格式内容或非Markdown JSON块，可能还在思考或出错。\")\n",
    "                        messages.append(response_message) # 非JSON格式，继续对话\n",
    "                # --- END: 添加 JSON 提取和解析逻辑 ---\n",
    "            else:\n",
    "                print(\"Agent: 未知响应，可能需要更多交互。\")\n",
    "                break\n",
    "                \n",
    "        except Exception as e:\n",
    "            print(f\"调用 DeepSeek API 时发生错误: {e}\")\n",
    "            break\n",
    "    \n",
    "    print(\"\\n⚠️ Agent 达到最大迭代次数或未能生成最终文案。请检查Prompt或增加迭代次数。\")\n",
    "    return \"未能成功生成文案。\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a520874c-84f5-4efe-8774-411ff2e3723d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "def format_rednote_for_markdown(json_string: str) -> str:\n",
    "    \"\"\"\n",
    "    将 JSON 格式的小红书文案转换为 Markdown 格式，以便于阅读和发布。\n",
    "\n",
    "    Args:\n",
    "        json_string (str): 包含小红书文案的 JSON 字符串。\n",
    "                           预计格式为 {\"title\": \"...\", \"body\": \"...\", \"hashtags\": [...], \"emojis\": [...]}\n",
    "\n",
    "    Returns:\n",
    "        str: 格式化后的 Markdown 文本。\n",
    "    \"\"\"\n",
    "    try:\n",
    "        data = json.loads(json_string)\n",
    "    except json.JSONDecodeError as e:\n",
    "        return f\"错误：无法解析 JSON 字符串 - {e}\\n原始字符串：\\n{json_string}\"\n",
    "\n",
    "    title = data.get(\"title\", \"无标题\")\n",
    "    body = data.get(\"body\", \"\")\n",
    "    hashtags = data.get(\"hashtags\", [])\n",
    "    # 表情符号通常已经融入标题和正文中，这里可以选择是否单独列出\n",
    "    # emojis = data.get(\"emojis\", []) \n",
    "\n",
    "    # 构建 Markdown 文本\n",
    "    markdown_output = f\"## {title}\\n\\n\" # 标题使用二级标题\n",
    "    \n",
    "    # 正文，保留换行符\n",
    "    markdown_output += f\"{body}\\n\\n\"\n",
    "    \n",
    "    # Hashtags\n",
    "    if hashtags:\n",
    "        hashtag_string = \" \".join(hashtags) # 小红书标签通常是空格分隔\n",
    "        markdown_output += f\"{hashtag_string}\\n\"\n",
    "        \n",
    "    # 如果需要，可以单独列出表情符号，但通常它们已经包含在标题和正文中\n",
    "    # if emojis:\n",
    "    #     emoji_string = \" \".join(emojis)\n",
    "    #     markdown_output += f\"\\n使用的表情：{emoji_string}\\n\"\n",
    "        \n",
    "    return markdown_output.strip() # 去除末尾多余的空白"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "25d8373d-6e19-4bd6-b85b-f04a2688aacb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🚀 启动小红书文案生成助手，产品：深海蓝藻保湿面膜，风格：活泼甜美\n",
      "\n",
      "-- Iteration 1 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_103980d3-571a-4d44-98b7-349ad69fc615', function=Function(arguments='{\"product_name\":\"深海蓝藻保湿面膜\"}', name='query_product_database'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'query_product_database'，参数：{'product_name': '深海蓝藻保湿面膜'}\n",
      "[Tool Call] 模拟查询产品数据库：深海蓝藻保湿面膜\n",
      "Observation: 工具返回结果：深海蓝藻保湿面膜：核心成分为深海蓝藻提取物，富含多糖和氨基酸，能深层补水、修护肌肤屏障、舒缓敏感泛红。质地清爽不粘腻，适合所有肤质，尤其适合干燥、敏感肌。规格：25ml*5片。\n",
      "-- Iteration 2 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_c62ca7aa-eb36-4c20-84be-c10d2eaea073', function=Function(arguments='{\"context\":\"补水保湿、修护肌肤、清爽质地\"}', name='generate_emoji'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'generate_emoji'，参数：{'context': '补水保湿、修护肌肤、清爽质地'}\n",
      "[Tool Call] 模拟生成表情符号，上下文：补水保湿、修护肌肤、清爽质地\n",
      "Observation: 工具返回结果：['💦', '💧', '🌊', '✨']\n",
      "-- Iteration 3 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='```json\\n{\\n  \"title\": \"💦深海蓝藻保湿面膜｜敏感肌也能用的补水神器✨\",\\n  \"body\": \"姐妹们！最近发现了一款神仙面膜——深海蓝藻保湿面膜！💧\\\\n\\\\n作为一个干敏皮，我真的太爱它了！核心成分是深海蓝藻提取物，富含多糖和氨基酸，不仅能深层补水，还能修护肌肤屏障，舒缓泛红～🌊\\\\n\\\\n质地超级清爽，敷完一点都不粘腻，皮肤水嫩嫩的像喝饱了水一样！而且一片25ml，精华液超多，性价比超高！\\\\n\\\\n用了两周，我的皮肤状态明显稳定了很多，上妆也不卡粉了！真心推荐给所有肤质，尤其是干燥敏感肌的姐妹！✨\\\\n\\\\n#深海蓝藻面膜 #补水神器 #敏感肌救星 #保湿面膜 #护肤好物\",\\n  \"hashtags\": [\"#深海蓝藻面膜\", \"#补水神器\", \"#敏感肌救星\", \"#保湿面膜\", \"#护肤好物\"],\\n  \"emojis\": [\"💦\", \"💧\", \"🌊\", \"✨\"]\\n}\\n```', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None)\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "[模型生成结果] ```json\n",
      "{\n",
      "  \"title\": \"💦深海蓝藻保湿面膜｜敏感肌也能用的补水神器✨\",\n",
      "  \"body\": \"姐妹们！最近发现了一款神仙面膜——深海蓝藻保湿面膜！💧\\n\\n作为一个干敏皮，我真的太爱它了！核心成分是深海蓝藻提取物，富含多糖和氨基酸，不仅能深层补水，还能修护肌肤屏障，舒缓泛红～🌊\\n\\n质地超级清爽，敷完一点都不粘腻，皮肤水嫩嫩的像喝饱了水一样！而且一片25ml，精华液超多，性价比超高！\\n\\n用了两周，我的皮肤状态明显稳定了很多，上妆也不卡粉了！真心推荐给所有肤质，尤其是干燥敏感肌的姐妹！✨\\n\\n#深海蓝藻面膜 #补水神器 #敏感肌救星 #保湿面膜 #护肤好物\",\n",
      "  \"hashtags\": [\"#深海蓝藻面膜\", \"#补水神器\", \"#敏感肌救星\", \"#保湿面膜\", \"#护肤好物\"],\n",
      "  \"emojis\": [\"💦\", \"💧\", \"🌊\", \"✨\"]\n",
      "}\n",
      "```\n",
      "Agent: 任务完成，成功解析最终JSON文案。\n",
      "\n",
      "--- 生成的文案 1 ---\n",
      "## 💦深海蓝藻保湿面膜｜敏感肌也能用的补水神器✨\n",
      "\n",
      "姐妹们！最近发现了一款神仙面膜——深海蓝藻保湿面膜！💧\n",
      "\n",
      "作为一个干敏皮，我真的太爱它了！核心成分是深海蓝藻提取物，富含多糖和氨基酸，不仅能深层补水，还能修护肌肤屏障，舒缓泛红～🌊\n",
      "\n",
      "质地超级清爽，敷完一点都不粘腻，皮肤水嫩嫩的像喝饱了水一样！而且一片25ml，精华液超多，性价比超高！\n",
      "\n",
      "用了两周，我的皮肤状态明显稳定了很多，上妆也不卡粉了！真心推荐给所有肤质，尤其是干燥敏感肌的姐妹！✨\n",
      "\n",
      "#深海蓝藻面膜 #补水神器 #敏感肌救星 #保湿面膜 #护肤好物\n",
      "\n",
      "#深海蓝藻面膜 #补水神器 #敏感肌救星 #保湿面膜 #护肤好物\n"
     ]
    }
   ],
   "source": [
    "# 测试案例 1: 深海蓝藻保湿面膜\n",
    "product_name_1 = \"深海蓝藻保湿面膜\"\n",
    "tone_style_1 = \"活泼甜美\"\n",
    "result_1 = generate_rednote(product_name_1, tone_style_1)\n",
    "\n",
    "print(\"\\n--- 生成的文案 1 ---\")\n",
    "print(format_rednote_for_markdown(result_1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "8f00b0e3-c01d-4278-9ee2-53beedb0d22f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🚀 启动小红书文案生成助手，产品：美白精华，风格：知性温柔\n",
      "\n",
      "-- Iteration 1 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_123ccefa-f4c2-4da1-a963-589449416a1e', function=Function(arguments='{\"product_name\":\"美白精华\"}', name='query_product_database'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'query_product_database'，参数：{'product_name': '美白精华'}\n",
      "[Tool Call] 模拟查询产品数据库：美白精华\n",
      "Observation: 工具返回结果：美白精华：核心成分是烟酰胺和VC衍生物，主要功效是提亮肤色、淡化痘印、改善暗沉。质地轻薄易吸收，适合需要均匀肤色的人群。\n",
      "-- Iteration 2 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_815a19d7-2d80-4c4d-8ba5-eb0c4e53cfc0', function=Function(arguments='{\"context\":\"美白提亮、温柔知性\"}', name='generate_emoji'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'generate_emoji'，参数：{'context': '美白提亮、温柔知性'}\n",
      "[Tool Call] 模拟生成表情符号，上下文：美白提亮、温柔知性\n",
      "Observation: 工具返回结果：['🎉']\n",
      "-- Iteration 3 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='```json\\n{\\n  \"title\": \"✨ 28天白到发光！这款美白精华真的绝了！✨\",\\n  \"body\": \"姐妹们！我终于找到了我的本命美白精华！💖\\\\n\\\\n作为一个常年熬夜党，皮肤暗沉、痘印问题一直困扰着我。直到遇到了这款美白精华，简直打开了新世界的大门！🎉\\\\n\\\\n🌟 **核心成分**：烟酰胺+VC衍生物，双管齐下，提亮肤色、淡化痘印效果超明显！\\\\n🌟 **质地**：轻薄水润，吸收超快，完全不会黏腻，夏天用也毫无压力！\\\\n🌟 **效果**：用了28天，皮肤真的白了一个度！而且痘印也淡了好多，素颜出门都自信满满！\\\\n\\\\n💡 **使用方法**：早晚洁面后，取2-3滴轻轻按压全脸，后续再叠加保湿产品，效果更赞哦！\\\\n\\\\n真心推荐给所有需要美白提亮的姐妹！入股不亏！🔥\",\\n  \"hashtags\": [\"#美白精华\", \"#提亮肤色\", \"#淡化痘印\", \"#护肤好物\", \"#28天美白计划\"],\\n  \"emojis\": [\"✨\", \"💖\", \"🎉\", \"🌟\", \"🔥\"]\\n}\\n```', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None)\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "[模型生成结果] ```json\n",
      "{\n",
      "  \"title\": \"✨ 28天白到发光！这款美白精华真的绝了！✨\",\n",
      "  \"body\": \"姐妹们！我终于找到了我的本命美白精华！💖\\n\\n作为一个常年熬夜党，皮肤暗沉、痘印问题一直困扰着我。直到遇到了这款美白精华，简直打开了新世界的大门！🎉\\n\\n🌟 **核心成分**：烟酰胺+VC衍生物，双管齐下，提亮肤色、淡化痘印效果超明显！\\n🌟 **质地**：轻薄水润，吸收超快，完全不会黏腻，夏天用也毫无压力！\\n🌟 **效果**：用了28天，皮肤真的白了一个度！而且痘印也淡了好多，素颜出门都自信满满！\\n\\n💡 **使用方法**：早晚洁面后，取2-3滴轻轻按压全脸，后续再叠加保湿产品，效果更赞哦！\\n\\n真心推荐给所有需要美白提亮的姐妹！入股不亏！🔥\",\n",
      "  \"hashtags\": [\"#美白精华\", \"#提亮肤色\", \"#淡化痘印\", \"#护肤好物\", \"#28天美白计划\"],\n",
      "  \"emojis\": [\"✨\", \"💖\", \"🎉\", \"🌟\", \"🔥\"]\n",
      "}\n",
      "```\n",
      "Agent: 任务完成，成功解析最终JSON文案。\n",
      "\n",
      "--- 生成的文案 2 ---\n",
      "## ✨ 28天白到发光！这款美白精华真的绝了！✨\n",
      "\n",
      "姐妹们！我终于找到了我的本命美白精华！💖\n",
      "\n",
      "作为一个常年熬夜党，皮肤暗沉、痘印问题一直困扰着我。直到遇到了这款美白精华，简直打开了新世界的大门！🎉\n",
      "\n",
      "🌟 **核心成分**：烟酰胺+VC衍生物，双管齐下，提亮肤色、淡化痘印效果超明显！\n",
      "🌟 **质地**：轻薄水润，吸收超快，完全不会黏腻，夏天用也毫无压力！\n",
      "🌟 **效果**：用了28天，皮肤真的白了一个度！而且痘印也淡了好多，素颜出门都自信满满！\n",
      "\n",
      "💡 **使用方法**：早晚洁面后，取2-3滴轻轻按压全脸，后续再叠加保湿产品，效果更赞哦！\n",
      "\n",
      "真心推荐给所有需要美白提亮的姐妹！入股不亏！🔥\n",
      "\n",
      "#美白精华 #提亮肤色 #淡化痘印 #护肤好物 #28天美白计划\n"
     ]
    }
   ],
   "source": [
    "# 测试案例 2: 美白精华\n",
    "product_name_2 = \"美白精华\"\n",
    "tone_style_2 = \"知性温柔\"\n",
    "result_2 = generate_rednote(product_name_2, tone_style_2)\n",
    "\n",
    "print(\"\\n--- 生成的文案 2 ---\")\n",
    "print(format_rednote_for_markdown(result_2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4b8e1fb0-cc18-4bae-90a7-9fe5f26cb977",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "🚀 启动小红书文案生成助手，产品：小红书美妆趋势，风格：专家解读\n",
      "\n",
      "-- Iteration 1 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_c000d565-d166-4f5b-87e3-f72d4e67c9dc', function=Function(arguments='{\"query\":\"最新小红书美妆趋势\"}', name='search_web'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'search_web'，参数：{'query': '最新小红书美妆趋势'}\n",
      "[Tool Call] 模拟搜索网页：最新小红书美妆趋势\n",
      "Observation: 工具返回结果：近期小红书美妆流行'多巴胺穿搭'、'早C晚A'护肤理念、'伪素颜'妆容，热门关键词有#氛围感、#抗老、#屏障修复。\n",
      "-- Iteration 2 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_5687c9dd-50cb-4d8e-9f9f-218624755e8d', function=Function(arguments='{\"context\":\"专家解读美妆趋势\"}', name='generate_emoji'), type='function', index=0)])\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "Agent: 决定调用工具...\n",
      "Agent Action: 调用工具 'generate_emoji'，参数：{'context': '专家解读美妆趋势'}\n",
      "[Tool Call] 模拟生成表情符号，上下文：专家解读美妆趋势\n",
      "Observation: 工具返回结果：['✨']\n",
      "-- Iteration 3 --\n",
      "\n",
      "\n",
      "\n",
      "-----------hiker debug start-----------\n",
      "ChatCompletionMessage(content='```json\\n{\\n  \"title\": \"【专家解读】2023小红书美妆趋势大公开！早C晚A、多巴胺穿搭、伪素颜全解析✨\",\\n  \"body\": \"姐妹们！2023年的美妆趋势又来啦！作为资深美妆博主，今天给大家带来最新小红书美妆趋势解读！\\\\n\\\\n🔥 **早C晚A**：依然是护肤界的顶流！白天抗氧化（维C），晚上抗老修复（维A），坚持一个月皮肤真的会发光！\\\\n\\\\n💖 **多巴胺穿搭**：彩妆也要玩转色彩！高饱和度的眼影、腮红，搭配撞色唇妆，让你成为人群中最亮眼的崽！\\\\n\\\\n🌸 **伪素颜**：看似没化妆，实则心机满满！轻薄的底妆、自然眉形、裸色唇釉，打造天生好皮肤的错觉！\\\\n\\\\n🌟 **氛围感妆容**：重点在光影！高光、修容、腮红的完美搭配，营造立体又温柔的妆效～\\\\n\\\\n💧 **屏障修复**：敏感肌的福音！成分党必入的修复类产品，比如神经酰胺、B5精华，维稳效果一级棒！\\\\n\\\\n快来跟上这些趋势，一起变美吧！评论区告诉我你最想尝试哪一款？👇\",\\n  \"hashtags\": [\"#美妆趋势\", \"#早C晚A\", \"#多巴胺穿搭\", \"#伪素颜\", \"#屏障修复\"],\\n  \"emojis\": [\"✨\", \"🔥\", \"💖\", \"🌸\", \"🌟\"]\\n}\\n```', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None)\n",
      "-----------hiker debug end-----------\n",
      "\n",
      "\n",
      "\n",
      "[模型生成结果] ```json\n",
      "{\n",
      "  \"title\": \"【专家解读】2023小红书美妆趋势大公开！早C晚A、多巴胺穿搭、伪素颜全解析✨\",\n",
      "  \"body\": \"姐妹们！2023年的美妆趋势又来啦！作为资深美妆博主，今天给大家带来最新小红书美妆趋势解读！\\n\\n🔥 **早C晚A**：依然是护肤界的顶流！白天抗氧化（维C），晚上抗老修复（维A），坚持一个月皮肤真的会发光！\\n\\n💖 **多巴胺穿搭**：彩妆也要玩转色彩！高饱和度的眼影、腮红，搭配撞色唇妆，让你成为人群中最亮眼的崽！\\n\\n🌸 **伪素颜**：看似没化妆，实则心机满满！轻薄的底妆、自然眉形、裸色唇釉，打造天生好皮肤的错觉！\\n\\n🌟 **氛围感妆容**：重点在光影！高光、修容、腮红的完美搭配，营造立体又温柔的妆效～\\n\\n💧 **屏障修复**：敏感肌的福音！成分党必入的修复类产品，比如神经酰胺、B5精华，维稳效果一级棒！\\n\\n快来跟上这些趋势，一起变美吧！评论区告诉我你最想尝试哪一款？👇\",\n",
      "  \"hashtags\": [\"#美妆趋势\", \"#早C晚A\", \"#多巴胺穿搭\", \"#伪素颜\", \"#屏障修复\"],\n",
      "  \"emojis\": [\"✨\", \"🔥\", \"💖\", \"🌸\", \"🌟\"]\n",
      "}\n",
      "```\n",
      "Agent: 任务完成，成功解析最终JSON文案。\n",
      "\n",
      "--- 生成的文案 3 ---\n",
      "## 【专家解读】2023小红书美妆趋势大公开！早C晚A、多巴胺穿搭、伪素颜全解析✨\n",
      "\n",
      "姐妹们！2023年的美妆趋势又来啦！作为资深美妆博主，今天给大家带来最新小红书美妆趋势解读！\n",
      "\n",
      "🔥 **早C晚A**：依然是护肤界的顶流！白天抗氧化（维C），晚上抗老修复（维A），坚持一个月皮肤真的会发光！\n",
      "\n",
      "💖 **多巴胺穿搭**：彩妆也要玩转色彩！高饱和度的眼影、腮红，搭配撞色唇妆，让你成为人群中最亮眼的崽！\n",
      "\n",
      "🌸 **伪素颜**：看似没化妆，实则心机满满！轻薄的底妆、自然眉形、裸色唇釉，打造天生好皮肤的错觉！\n",
      "\n",
      "🌟 **氛围感妆容**：重点在光影！高光、修容、腮红的完美搭配，营造立体又温柔的妆效～\n",
      "\n",
      "💧 **屏障修复**：敏感肌的福音！成分党必入的修复类产品，比如神经酰胺、B5精华，维稳效果一级棒！\n",
      "\n",
      "快来跟上这些趋势，一起变美吧！评论区告诉我你最想尝试哪一款？👇\n",
      "\n",
      "#美妆趋势 #早C晚A #多巴胺穿搭 #伪素颜 #屏障修复\n"
     ]
    }
   ],
   "source": [
    "# 测试案例 3: 小红书美妆趋势\n",
    "product_name_3 = \"小红书美妆趋势\"\n",
    "tone_style_3 = \"专家解读\"\n",
    "result_3 = generate_rednote(product_name_3, tone_style_3)\n",
    "\n",
    "print(\"\\n--- 生成的文案 3 ---\")\n",
    "print(format_rednote_for_markdown(result_3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ff0e8611-2b0f-44c4-a75b-5dad664270a4",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
